global lista_insertar_ordenado
;void lista_insertar_ordenado ( nodo_lista_t **l, nodo_lista_t *n )

extern malloc

%define pp_lista ebp+8
%define p_nodo ebp+12

%define offset_simbolo 0
%define offset_apariciones 1
%define offset_valido 5
%define offset_p_padre	9 
%define offset_p_izq	13
%define offset_p_der	17
%define null 0
%define offset_p_arbol 0
%define offset_siguiente 4

section .text

lista_insertar_ordenado:

	;enter 0,0	; comentado para probar con valgrind
	push ebp
	mov ebp,esp
	
	push ebx
	push esi
	push edi
		
	mov ebx, [p_nodo] ; ebx contiene el puntero al nodo del arbol que se quiere insertar
	mov edi, [ebx+offset_p_arbol]
	mov edi, [edi+offset_apariciones] ; pongo en edi la cantidad de apariciones
	
	mov esi,[pp_lista]
	mov ebx,[esi] ; apunto al primero de la lista
	

	
buscarLugar:			
	 
	cmp ebx,null
	je _insertarNodo
	
	mov edx, [ebx+offset_p_arbol]
	cmp edi, [edx+offset_apariciones]
	jng _insertarNodo
	
	lea esi,[ebx+offset_siguiente]
	mov ebx,[ebx+offset_siguiente]	
	
	jmp buscarLugar
	
_insertarNodo:
	
	mov edx,[p_nodo]
	mov [edx+offset_siguiente],ebx    ; Con esto enlazamos el nodo con el siguiente
	
	mov dword [esi], edx		; Con esto enlazamos el anterior al nodo
	
fin:
	pop edi
	pop esi
	pop ebx
	leave
	ret
	








